import axios from 'axios'
import { Message, MessageBox ,Loading } from 'element-ui'
// import store from '../store'
import { dataEncryption } from '@/utils/index'
import qs from 'qs'


// 每次请求去掉空值参数
function delNoneParameter(data){
  // console.log(data)
  let obj = new Object()
  Object.keys(data).sort().map(function(key){
    // console.log(typeof(data[key]),'xinhuan')
    // 判断key值的类型，文件的过滤掉
    if(data[key] !== "" && data[key] != undefined && data[key] != null && data[key] != 'null'){
      // console.log('是否进入判断')
      // Object.assign(obj,{key:data[key]})
      obj[key] = data[key]
    }
  })
  // console.log(obj)
  return obj
}

// 代理只能在开发环境使用，生产环境需要在nginx上配置代理
// const baseUrl = process.env.NODE_ENV === 'production'?'https://test-tax.mingchetech.com/api/v1.0':'/api/api/v1.0'  // 测试环境接口地址
const baseUrl = process.env.NODE_ENV === 'production'?'https://taxbackend.51jishang.com/api/v1.0':'/api/api/v1.0'  // 正式环境接口地址

// 创建axios实例
const service = axios.create({
  // baseURL: 'http://192.168.0.181/api/v1.0', 
  baseURL: baseUrl,// api的base_url
  timeout: 60000 // 请求超时时间
})

// 不需要验签的接口（全部都是需要上传文件的接口）
const noSignUrl = [
]

const noTokenUrl = [
  '/notice/web/msg-verificationCode/send', // 发送验证码
  '/user/web/query/config', // 获取配置
  '/merchant/web/photo-merchant/search', // 获取图片内容
  '/project/web/detail-project/search',
  '/project/web/picture/search',
  '/merchant/web/password/reset', // 重置密码
]

// request拦截器
service.interceptors.request.use(config => {
  if (sessionStorage.getItem('token') && noTokenUrl.indexOf(config.url) == -1) {
    config.headers['authToken'] =sessionStorage.getItem('token') // 让每个请求携带自定义token 请根据实际情况自行修改
  }
  console.log(config,"config")
  if(noSignUrl.indexOf(config.url) == -1){
    if(config.method == 'post'){
      config.data = qs.stringify(delNoneParameter(qs.parse(qs.stringify(Object.assign(qs.parse(config.data),dataEncryption(qs.parse(config.data)))))))
    }else if(config.method == 'get'){
      // console.log(config.params)
      config.params = delNoneParameter(qs.parse(qs.stringify(Object.assign(config.params,dataEncryption(config.params)))))
    }
  }
    // config.data='phone=&realnameStatus='
  // console.log(config,"config")
  return config
}, error => {
  // Do something with request error
  console.log(error) // for debug
  Promise.reject(error)
})

// startLoading()
// respone拦截器
service.interceptors.response.use(
  response => {
    const res = response.data
    // console.log(res,"res.....")
    //  if(res.resp_code == '000005'){
    //     MessageBox.confirm('您的登录已过期，可以取消继续留在该页面，或者重新登录', '确定登出', {
    //       confirmButtonText: '重新登录',
    //       cancelButtonText: '取消',
    //       type: 'warning'
    //     }).then(() => {
    //     })
    // }else 
    // console.log(response,'res')
    if (res.resp_code == '000000') {
      return response
    }else if(res.resp_code == '999996'){
      MessageBox.confirm('您的登录已过期，可以取消继续留在该页面，或者重新登录', '确定登出', {
              confirmButtonText: '重新登录',
              cancelButtonText: '取消',
              type: 'warning'
      }).then(() => {
      })
    } else {
      if(response.config.responseType != 'blob'){
        Message({
          message: res.resp_message,
          type: 'warning',
          duration: 5 * 1000
        })
        return response
      }else{
        Message({
          message: '下载附件成功',
          type: 'success',
          duration: 5 * 1000
        })
        return response
      }
    }
  },
  error => {
    // Message({
    //   message:'网络丢失了吆！请稍后重试！',
    //   type: 'error',
    //   duration: 5 * 1000
    // })
    if (error && error.response) {
     
      switch (error.response.status) {
        case 404:
          error.message = '请求出错(404)'
          Message({ message:'请求出现了404！请稍后重试！' })
          break;
          case 401:
          MessageBox.confirm('您的登录已过期，可以取消继续留在该页面，或者重新登录', '确定登出', {
            confirmButtonText: '重新登录',
            cancelButtonText: '取消',
            type: 'warning'
          }).then(() => {
          })
          break;
        default: 
        
        error.message = `连接出错(${error.response.status})!`;
        Message({
            message:'网络丢失了吆！请稍后重试！',
            type: 'error',
            duration: 5 * 1000
          })
      }
   
  }
    return Promise.reject(error)
  }
)

export default service
